package com.chixing.ih.module.task.service;

import com.chixing.ih.module.programmer.pojo.dto.ProgrammerCompareDTO;
import com.chixing.ih.module.programmer.pojo.dto.ProgrammerEntiretyDTO;
import com.chixing.ih.module.task.mapper.provider.TaskMapperProvider;
import com.chixing.ih.module.task.pojo.Contract;
import com.chixing.ih.module.task.pojo.DTO.ContractDTO;
import com.chixing.ih.module.task.pojo.DTO.TaskDTO;
import com.chixing.ih.module.task.pojo.DTO.TaskShowDTO;
import com.chixing.ih.module.task.pojo.Task;
import com.chixing.ih.util.PageRequest;
import org.apache.ibatis.annotations.SelectProvider;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 目的:
 *
 * @author ：zcw
 * @version: 1.0  2020/9/29 19:10
 */
public interface ITaskService {

    int insertOne(Task task);

    int deleteOne(Long taskId);

    int deleteAll(Long userId);

    int updateOne(Task task);

    //查询一条任务，根据id
    TaskShowDTO findOne(Long id);

    TaskShowDTO findTaskOne(Long id);


    //查询一个人接受但还在审核中的任务
    List<TaskShowDTO> findAccepting(PageRequest pageRequest, Long userId);


    //查询一个人的全部发布但还在审核中的任务
    List<TaskShowDTO> findBySendTaskTypeStatus(PageRequest pageRequest, Long userId);


    //查询一个人发布但还未被接取的任务
    List<TaskShowDTO> findBySendTaskStatus(PageRequest pageRequest, Long userId);


    //查看任务申请列表
    List<ProgrammerEntiretyDTO> findAllApplication(PageRequest pageRequest, Long taskId);


    //查询一个人全部参与的任务
    List<TaskShowDTO> findByReceiveTaskUserId(PageRequest pageRequest, Long userId);

    //查询全部任务
    List<TaskShowDTO> findAll(PageRequest pageRequest, HttpServletRequest request, String talentCategories,
                              String workPlace, Long workWay,
                              Integer sort);

    //对比查询
    List<ProgrammerCompareDTO> findByList(List<Long> list);

    //查询共有多少人投递
    Integer findCount(Long taskId);

    //投递岗位
    Integer insertDelivery(Long taskId, Long userId);

    //转一转
    Integer takeTurn(Long taskId, HttpServletRequest request);

    //查询任务个数
    long taskTotalNumber();

    //查询合同
    ContractDTO contract(Long taskId, Long receiveTaskId, Long sendTaskUserId);

    //保存合同
    Integer saveContract(Contract contract);

    Integer updatePartBImg(Contract contract);

    List<String> getCitys();

    List<String> getTalentCategory();

    TaskDTO getOneTask(Long id);
}
